import axios from 'axios'

// 创建axios实例
const api = axios.create({
  baseURL: 'http://localhost:5000/api',
  timeout: 300000 // 5分钟超时，知识抽取需要较长时间
})

// 请求拦截器
api.interceptors.request.use(
  config => {
    // 添加token
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器
api.interceptors.response.use(
  response => {
    return response.data
  },
  error => {
    if (error.response?.status === 401) {
      // 未授权，清除token并跳转登录
      localStorage.removeItem('token')
      localStorage.removeItem('user')
      window.location.href = '/login'
    }
    return Promise.reject(error)
  }
)

// ==================== 认证API ====================

export const authAPI = {
  // 登录
  login(username, password) {
    return api.post('/auth/login', { username, password })
  },
  
  // 注册
  register(username, password) {
    return api.post('/auth/register', { username, password })
  },
  
  // 获取当前用户
  getCurrentUser() {
    return api.get('/auth/me')
  }
}

// ==================== 用户管理API ====================

export const userAPI = {
  // 获取用户列表
  getUsers() {
    return api.get('/users')
  },
  
  // 更新用户
  updateUser(userId, data) {
    return api.put(`/users/${userId}`, data)
  },
  
  // 删除用户
  deleteUser(userId) {
    return api.delete(`/users/${userId}`)
  }
}

// ==================== 知识抽取API ====================

export const extractAPI = {
  // 执行知识抽取 - 无超时限制
  extract(prompt, document_id) {
    return api.post('/extract', { prompt, document_id }, {
      timeout: 0 // 0表示无超时限制，因为大模型抽取可能需要很长时间
    })
  },
  
  // 优化提示词
  optimizePrompt(prompt) {
    return api.post('/extract/optimize-prompt', { prompt }, {
      timeout: 60000 // 60秒超时
    })
  },
  
  // 获取抽取记录列表
  getExtractions() {
    return api.get('/extractions')
  },
  
  // 获取抽取记录详情
  getExtraction(extractionId) {
    return api.get(`/extractions/${extractionId}`)
  }
}

// ==================== 数据API ====================

export const dataAPI = {
  // 获取所有实体
  getEntities() {
    return api.get('/entities')
  },
  
  // 获取所有关系
  getRelations() {
    return api.get('/relations')
  }
}

// ==================== 知识图谱API ====================

export const graphAPI = {
  // 获取知识图谱
  getKnowledgeGraph() {
    return api.get('/knowledge-graph')
  }
}

// ==================== 知识库API ====================

export const knowledgeBaseAPI = {
  // 添加文档
  addDocument(document) {
    return api.post('/knowledge-base/add', { document })
  },
  
  // 搜索知识库
  search(query, top_k = 5) {
    return api.post('/knowledge-base/search', { query, top_k })
  }
}

// ==================== 文档管理API ====================

export const documentAPI = {
  // 获取文档列表
  getDocuments() {
    return api.get('/documents')
  },
  
  // 获取文档详情
  getDocument(docId) {
    return api.get(`/documents/${docId}`)
  },
  
  // 上传文档
  uploadDocument(formData) {
    return api.post('/documents/upload', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
  },
  
  // 删除文档
  deleteDocument(docId) {
    return api.delete(`/documents/${docId}`)
  }
}

// 添加通用的上传方法到默认导出对象
api.upload = function(url, formData) {
  return this.post(url, formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

export default api

